Hyperledger Composer
Table of Contents
安装
前提条件
curl -O https://hyperledger.github.io/composer/latest/prereqs-ubuntu.sh chmod u+x prereqs-ubuntu.sh ./prereqs-ubuntu.sh
安装组件
安装 CLI tools
composer-cli 是最重要的组件, 包含了基本的操作. generator-hyperledger-composer, composer-rest-server, yeoman 这三个虽然不是核心部分, 但在后面与我们自己定义的网络交互时, 可以起到作用.
npm install -g composer-cli@0.20 npm install -g composer-rest-server@0.20 npm install -g generator-hyperledger-composer@0.20 npm install -g yo
如果要卸载:
npm uninstall -g composer-cli composer-rest-server generator-hyperledger-composer
安装 Plyaground
Playground 可以为我们提供 UI 视图.
npm install -g composer-playground@0.20
安装 Hyperledger Fabric
mkdir fabric-dev-servers && cd fabric-dev-servers curl -O https://raw.githubusercontent.com/hyperledger/composer-tools/master/packages/fabric-dev-servers/fabric-dev-servers.tar.gz tar -xvf fabric-dev-servers.tar.gz cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./downloadFabric.sh
这边安装的是 Hyperledger Fabric v1.2 的版本.
使用
启动和停止 Hyperledger Fabric
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./startFabric.sh ./createPeerAdminCard.sh # 关闭 ./stopFabric.sh ./teardownFabric.sh
启动 Playground
在启动 Hyperledger Fabric 后, 运行:
composer-playground
删除当前设置
docker kill $(docker ps -q) docker rm $(docker ps -aq) docker rmi $(docker images dev-* -q)
Playground 教程
利用 Playground, 我们可以建立一个业务网络, 定义资产, 参与者, 交易, 并进行测试.
打开 Playground
composer-playground
创建新的业务网络
Deploy a new business network
输入名称
empty-business-network(从零开始才选择这项, 也可以基于其他网络创建)
Deploy
连接到刚部署的网络
单击 connect now
添加模型文件
(最好自己写一份上传)
单击 Model file, 并用以下代码来替换它们:
/**
* My commodity trading network
*/
namespace org.example.mynetwork
asset Commodity identified by tradingSymbol {
o String tradingSymbol
o String description
o String mainExchange
o Double quantity
--> Trader owner
}
participant Trader identified by tradeId {
o String tradeId
o String firstName
o String lastName
}
transaction Trade {
--> Commodity commodity
--> Trader newOwner
}
这个模型定义了一个资产 Commodity, 一个参与者 Trader, 一个交易 Trade.
添加处理逻辑
Composer 使用 JavaScript 来表达业务网络的逻辑, 提交事务进行处理时, 将自动执行这些功能.
Add a file -> Script file -> Add
用以下代码来替换:
/**
* Track the trade of a commodity from one trader to another
* @param {org.example.mynetwork.Trade} trade - the trade to be processed
* @transaction
*/
async function tradeCommodity(trade) {
trade.commodity.owner = trade.newOwner;
let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
await assetRegistry.update(trade.commodity);
}
这段代码使用新的所有者 trade.newOwner 来替换原有的所有者 trade.commodity.owner, 然后将修改后的 trade.commodity 保存.
访问控制
这个例子中的网络很简单, 因此不需要修改默认的访问控制.
部署和更新业务网络
单击左下角的 Deploy changes.
测试
添加资产
单击 Test 导航栏.
添加两个参与者.
单击 Trader -> Create New Participant, 用以下代码来替换, 然后单击 Create new.
{
"$class": "org.example.mynetwork.Trader",
"tradeId": "TRADER1",
"firstName": "Jenny",
"lastName": "Jones"
}
创建第二个参与者:
{
"$class": "org.example.mynetwork.Trader",
"tradeId": "TRADER2",
"firstName": "Amy",
"lastName": "Williams"
}
添加参与者
Commodity -> Assets -> Create New Asset
使用以下代码替换:
{
"$class": "org.example.mynetwork.Commodity",
"tradingSymbol": "ABC",
"description": "Test commodity",
"mainExchange": "Euronext",
"quantity": 72.297,
"owner": "resource:org.example.mynetwork.Trader#TRADER1"
}
在两个参与者之间转移资产
Submit Transaction, 用以下代码替换:
{
"$class": "org.example.mynetwork.Trade",
"commodity": "resource:org.example.mynetwork.Commodity#ABC",
"newOwner": "resource:org.example.mynetwork.Trader#TRADER2"
}
Submit -> All Transactions
基于已有 Fabric 创建业务网络
如果已有 Fabric, 那么我们已经有了 PeerAdmin 和 ChannelAdmin, 在部署之前, 需要再填写一些其他字段.
要提供网络管理员的凭证时, 我们应该填写: Enrollment ID, admin Enrollment Secret, adminpw
使用命令的方式创建业务网络
配置环境
export FABRIC_VERSION=hlfv12 ./startFabric.sh ./createPeerAdminCard.sh
创建网络结构
yo hyperledger-composer:businessnetwork
按照提示, 输入网络名字等信息, 其中, namespace 输入 org.example.mynetwork, generate an empty template network 中, 选择 No.
定义网络
使用以下代码代替 org.example.mynetwork.cto 文件里的内容:
/**
* My commodity trading network
*/
namespace org.example.mynetwork
asset Commodity identified by tradingSymbol {
o String tradingSymbol
o String description
o String mainExchange
o Double quantity
--> Trader owner
}
participant Trader identified by tradeId {
o String tradeId
o String firstName
o String lastName
}
transaction Trade {
--> Commodity commodity
--> Trader newOwner
}
我们使用 JavaScript 来执行 .cto 文件中定义的交易. 将 lib/logic.js 中的内容替换如下:
/**
* Track the trade of a commodity from one trader to another
* @param {org.example.mynetwork.Trade} trade - the trade to be processed
* @transaction
*/
async function tradeCommodity(trade) {
trade.commodity.owner = trade.newOwner;
let assetRegistry = await getAssetRegistry('org.example.mynetwork.Commodity');
await assetRegistry.update(trade.commodity);
}
使用以下代码替换 permissions.acl 中的内容:
/**
* Access control rules for tutorial-network
*/
rule Default {
description: "Allow all participants access to all resources"
participant: "ANY"
operation: ALL
resource: "org.example.mynetwork.*"
action: ALLOW
}
rule SystemACL {
description: "System ACL to permit all access"
participant: "ANY"
operation: ALL
resource: "org.hyperledger.composer.system.**"
action: ALLOW
}
生成网络
进入 tutorial-network 目录, 执行命令:
composer archive create -t dir -n .
将会在当前目录生成一个 .bna 文件.
部署业务网络
一般来说, Fabric 管理员需要创建一个 PeerAdmin 身份, 来执行安装链码和启动链码的命令, 不过在这边, Composer 已经自动为我们创建好了.
部署网络, 启动网络:
composer network install --card PeerAdmin@hlfv1 --archiveFile tutorial-network@0.0.1.bna composer network start --networkName tutorial-network --networkVersion 0.0.1 --networkAdmin admin --networkAdminEnrollSecret adminpw --card PeerAdmin@hlfv1 --file networkadmin.card
为了顺利使用这个网络, 需要将 .card 文件导入.
composer card import --file networkadmin.card
测试是否部署成功:
composer network ping --card admin@tutorial-network
生成 REST 服务
composer-rest-server
然后输入名字: admin@tutorial-network
use namespaces in the generated API: never use namespaces
secure the generated API: No
enable event publication: Yes
是否开启 TLS: No
生成应用程序
再开一个终端, 进入 tutorial-network
yo hyperledger-composer:angular
使用 Composer 为单个 Org 部署业务网络
启动 Hyperledger Fabric Network
cd ~/fabric-dev-servers export FABRIC_VERSION=hlfv12 ./stopFabric.sh ./teardownFabric.sh ./downloadFabric.sh ./startFabric.sh composer card delete -c PeerAdmin@fabric-network composer card delete -c admin@tutorial-network # 如果上面的删除命令失败了, 则索性把整个文件删除 rm -fr ~/.composer
创建 .bna 文件
根据前面"使用命令的方式创建业务网络"介绍的内容, 创建 .bna 文件.
创建 connection.json
编辑 connection.json
{
"name": "fabric-network",
"x-type": "hlfv1",
"version": "1.0.0",
"peers": {
"peer0.org1.example.com": {
"url": "grpc://localhost:7051"
}
},
"certificateAuthorities": {
"ca.org1.example.com": {
"url": "http://localhost:7054",
"caName": "ca.org1.example.com"
}
},
"orderers": {
"orderer.example.com": {
"url": "grpc://localhost:7050"
}
},
"organizations": {
"Org1": {
"mspid": "Org1MSP",
"peers": [
"peer0.org1.example.com"
],
"certificateAuthorities": [
"ca.org1.example.com"
]
}
},
"channels": {
"composerchannel": {
"orderers": [
"orderer.example.com"
],
"peers": {
"peer0.org1.example.com": {
"endorsingPeer": true,
"chaincodeQuery": true,
"eventSource": true
}
}
}
},
"client": {
"organization": "Org1",
"connection": {
"timeout": {
"peer": {
"endorser": "300",
"eventHub": "300",
"eventReg": "300"
},
"orderer": "300"
}
}
}
}
创建业务网卡
业务网卡包含连接到业务网络和 Fabric 网络所需的所有信息. 使用 composer card create 来创建业务网卡.
composer card create -p connection.json -u PeerAdmin -c Admin@org1.example.com-cert.pem -k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk -r PeerAdmin -r ChannelAdmin
-p connection.json: 填写指向 connection.json 的路径.
-u PeerAdmin: 指定管理员的名称.
-c Admin@org1.example.com-cert.pem: 填写指向证书文件的路径, 路径为 fabric-dev-servers/fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
-k 114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk: 填写私钥文件路径, 存储在 keystore 里
完整的命令类似如下:
composer card create -p connection.json -u PeerAdmin -c ../fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/signcerts/Admin@org1.example.com-cert.pem -k ../fabric-scripts/hlfv11/composer/crypto-config/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp/keystore/114aab0e76bf0c78308f89efc4b8c9423e31568da0c340ca187a9b17aa9a4457_sk -r PeerAdmin -r ChannelAdmin
这条命令会输出 .card 文件到当前目录.
将业务网卡导入给 Fabric 管理员
composer card import -f PeerAdmin@fabric-network.card
将业务网络安装到节点上
可以将这一步理解为在 Fabric 中的安装链码.
composer network install -c PeerAdmin@fabric-network -a tutorial-network@0.0.1.bna
将 card 文件导入到业务网络
composer card import -f admin@tutorial-network.card
测试
composer network ping -c admin@tutorial-network
Generated by Emacs 25.x(Org mode 8.x)
Copyright © 2014 - Pinvon - Powered by EGO